草庐IT

Java ASN.1 编译器

全部标签

c++ - 现代编译器可以在使用依赖注入(inject)时去虚拟化函数调用吗

当您希望您的代码可测试时,依赖注入(inject)是一种非常重要的模式,它一直在大型C++项目中使用。这是一个简单的例子://Copyright2019GoogleLLC.//SPDX-License-Identifier:Apache-2.0classFooInterface{public:virtualvoidf()=0;virtual~FooInterface()=default;};classFoo:publicFooInterface{public:voidf()override{/*Actualwork*/}};classMockFoo:publicFooInterface

c++ - 无法编译访问另一个 dll 的 dll

所以,我有一个有趣的问题。我正在使用一组专有的dll,显然我没有这些dll的源代码。目标是编写一个中间dll,将来自专有dll的大量函数调用组合在一起。我遇到的问题是,在使用g++进行编译时,原始dll出现如下错误:无法导出libname_NULL_THUNK_DATA。找不到符号。如果我添加一个main并编译成一个可执行文件,一切都会按预期工作。我正在使用mingw进行编译。感谢您的帮助。针对第一个回复:要么我对您所说的内容感到困惑,要么我没有很好地表达我的问题。我并没有明确尝试从我的包装器中导出任何东西,我只是从它们的dll中调用函数。问题是我收到错误,无法将这些特定符号从dll导

c++ - 编译器如何处理内联导出函数?

如果头文件包含一个函数定义,它可以被编译器内联。如果函数被导出,函数的名称和实现也必须在链接期间对客户端可用。编译器如何实现这一点?它是否既内联函数又为外部调用者提供实现?考虑Foo.h:classFoo{intbar(){return1;}};Foo::bar在库foo.so中可能是内联的,也可能不是。如果另一段代码包含Foo.h,它是否总是创建自己的Foo::bar拷贝,无论是否内联? 最佳答案 头文件只是复制粘贴到源文件中——这就是#include所做的一切。一个函数只有在使用该关键字声明或在类定义中定义时才是inline,而

c++ - Boost Test 寄存器异常翻译器

有人知道在Boost.Test中使用自动测试用例时如何注册我的自定义异常转换器吗?我找到了一些示例(实际上很少),但它们没有显示如何将此功能与自动测试用例一起使用,这在我看来是boost.test的最大优势。我的示例测试套件:#defineBOOST_TEST_MODULEStateMachineTest#defineBOOST_TEST_DYN_LINK#includeBOOST_AUTO_TEST_SUITE(FirstTest);BOOST_AUTO_TEST_CASE(testBasic){BOOST_CHECK(true);}BOOST_AUTO_TEST_SUITE_END

c++ - 找出用于编译可执行文件/DLL 的 Boost 版本

有什么方法可以使用“字符串”或其他一些命令来决定使用哪个版本的Boost来编译特定的可执行文件或.so?我所拥有的只是可执行文件/.so本身。 最佳答案 Boost主要是一个只有头文件的库,广泛使用模板(所有模板都可能编译成一些优化的二进制文件)。仅给定可执行二进制文件,您很可能无法推断出所使用的Boost版本。可能是您了解使用哪个Boost版本的唯一方法是查看可执行文件的版本号(如果有的话),然后在它来自的源代码控制存储库中查找(如果您有权访问它)。 关于c++-找出用于编译可执行文件

c++ - 无法在 Visual Studio 10 中编译 SFINAE

#include#include#include#include#include#includestructX{};structY{};__int8f(Xx){return0;}__int16f(...){return0;}templatetypenamestd::enable_if::typecall(Tconst&t){std::couttypenamestd::enable_if::typecall(Tconst&t){std::cout这里好像是很简单的SFINAE的使用,但是编译器报错,就是不能实例化enable_if::type.有什么建议么?显然这段代码在GCC上编译得很

c++ - 是否有任何软件可以在文件更改时重新编译基于 CMake 的软件项目?

我正在开发一个使用CMake的C++软件项目作为它的构建系统。该软件基于MacOS/X、Linux和Windows。为了改进我通常的破解/编译/测试周期,我想知道是否有一些类似守护进程的软件可以识别CMake项目考虑的所有源文件。每当修改任何源文件时,守护程序都会注意到这一点并重建受影响的目标。我的想法是,我的周期中的“编译”步骤会变得更快,因为它可以立即返回说“因为你的友好邻居构建守护进程已经重建了所有文件,所以没什么可做的。”。有人知道现有的软件可以这样做吗?如果没有-是否有可能以某种方式导出CMake考虑的源文件列表,以便我可以自己编写一个小守护程序来监视这些文件并重新运行mak

c++ - VS2008 C++ 编译器一直要求构建项目

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Visualstudiokeepsbuildingeverything我有一个项目包含一个idl文件,该文件生成一个.c文件,该文件包含在同一项目的另一个文件中。我构建了这个项目,一切正常,然后我尝试运行该项目,我被告知该项目已过时,我想构建它吗?如果我选择是来构建它,则会再次编译idl。如果不将VS项目设置设置为从不提示我进行构建,是否有任何方法可以停止此操作?

c++ - 如何使用 open64 编译器构建 boost 库?

我想试试AMD的open64编译器,但为此我首先需要使用此编译器构建一些boost库(当前版本1.46_1)。不幸的是,open64不在boost.build系统提供的工具集中,参见例如here或更详细here.现在,我如何获得open64构建的boost?到目前为止,这是我尝试过/发现的:在子目录tools/build/v2/tools有一堆.jam文件似乎定义了可以通过using使用的工具集指令,例如usinggcc;.这些看起来很难看,我真的不知道如何为open64(或openCC,这是实际命令)编写一个。由于openCC的接口(interface)显然与gcc的接口(inter

c++ - 由于抽象模板 arg 的实例化,boost::lambda 表达式无法编译。任何解释和/或解决方法?

我正在学习boost::lambda,并且我已经设法创造了一个我目前所知道的无法解决的情况。显然在boost::lambda的内部,以下示例导致尝试实例化抽象类AbstractFoo,并阻止lambda表达式编译。问题是我不知道它为什么要实例化它,所以我无法尝试解决它。​​任何boost::lambda专家都可以:请告诉我为什么会这样?建议解决方法?例子:#include#include#include#includestructAbstractFoo{typedefboost::shared_ptrPtr;virtualintit()const=0;};structBar:publi